// ----------------------------------------
// Filename: I2C.h
// Description: Routines to implement an MSSP I2C
// Author: Anton Jatmiko
// Date: 19 April 2014

#ifndef I2C_H
#define	I2C_H

#include <xc.h>
#include "types.h"

#define _XTAL_FREQ                 4000000

// ----------------------------------------
// I2C_Init
// 
// Initialize I2C MSSP
// Input:
//   none
// Output:
//   none
// Conditions:
//   none
void I2C_Init(void);

// ----------------------------------------
// I2C_Busy
// 
// Check the status of the MSSP
// Input:
//   none
// Output:
//   TRUE if busy
// Conditions:
//   none
BOOL I2C_Busy(void);

// ----------------------------------------
// I2C_Start
// 
// Send a start bit
// Input:
//   none
// Output:
//   TRUE if sent
// Conditions:
//   none
BOOL I2C_Start(void);

// ----------------------------------------
// I2C_Stop
// 
// Send a stop bit
// Input:
//   none
// Output:
//   TRUE if sent
// Conditions:
//   none
BOOL I2C_Stop(void);

// ----------------------------------------
// I2C_Restart
// 
// Send a restart bit
// Input:
//   none
// Output:
//   TRUE if sent
// Conditions:
//   none
BOOL I2C_Restart(void);

// ----------------------------------------
// I2C_ACK
// 
// Send an acknowledge bit
// Input:
//   none
// Output:
//   TRUE if sent
// Conditions:
//   none
BOOL I2C_ACK(void);

// ----------------------------------------
// I2C_NAK
// 
// Send an non-acknowledge bit
// Input:
//   none
// Output:
//   TRUE if sent
// Conditions:
//   none
BOOL I2C_NAK(void);

// ----------------------------------------
// I2C_Busy
// 
// Transmit data to slave
// Input:
//   data is the data to be trasmitted
// Output:
//   TRUE if transmitted
// Conditions:
//   none
BOOL I2C_Transmit(UINT8 data);

// ----------------------------------------
// I2C_Receive
// 
// Receive the data from slave
// Input:
//   data is a pointer to the received data
// Output:
//   TRUE if received
// Conditions:
//   none
BOOL I2C_Receive(UINT8 * const dataPtr);

#endif	/* I2C_H */

